package main

import (
	"encoding/json"
	//"fmt"
	"io/ioutil"
	"os"
)

type MysqlOPT struct {
	Host   string `json:"host"`
	Port   int    `json:"port"`
	User   string `json:"user"`
	Passwd string `json:"passwd"`
	DBName string `json:"dbname"`
}

type SQLite3OPT struct {
	DBFile string `json:"dbfile"`
	DBName string `json:"dbname"`
}

type FundingRateOPT struct {
	GetFundingRateDuration int     `json:"getFundingRateDuration"`
	CreateFundingRate      float64 `json:"createFundingRate"`
	CloseFundingRate       float64 `json:"closeFundingRate"`
}

type Config struct {
	ApiKey             string         `json:"apiKey"`             //账户apiKey
	SecretKey          string         `json:"secretKey"`          //账户secretKey
	LogFile            string         `json:"logFile"`            //日志文件
	LogLevel           int            `json:"logLevel"`           //日志级别  0--Debug, 1--Info, 2--Warn, 3--Error
	GetPriceDuration   int            `json:"getPriceDuration"`   //获取价格时间间隔
	QuoteOrderQty      float64        `json:"quoteOrderQty"`      //一次执行的下单USDT数量
	CreatePremium      float64        `json:"createPremium"`      //开仓最小溢价
	GreatCreatePremium float64        `json:"greatCreatePremium"` //理想开仓溢价，溢价达到此值时立刻开仓
	ClosePremium       float64        `json:"closePremium"`       //平仓溢价
	GreatClosePremium  float64        `json:"greatClosePremium"`  //理想平仓溢价，溢价达到此值时立刻平仓
	PremiumStage       float64        `json:"premiumStage"`       //溢价阶梯值
	QuoteMultiple      float64        `json:"quoteMultiple"`      //单腿成交时，如果溢价差大于开仓最小溢价，并且当前挂单总值大于开仓价的倍数，就挂市价单吃单
	FundingRateOpt     FundingRateOPT `json:"fundingRateOpt"`     //资金费率相关参数
	PersistenceType    int            `json:"persistencetype"`    //持久化方式，1--mysql，2--sqlite3
	MysqlOpt           MysqlOPT       `json:"mysqlopt"`           //mysql参数
	Sqlite3Opt         SQLite3OPT     `json:"sqlite3opt"`         //sqlite3参数
}

var conf Config

func conf_init() {
	var config_path string
	config_path = getEnvDefault("CONFIG_PATH", ".")
	data, err := ioutil.ReadFile(config_path + "/config.json")
	if err != nil {
		//fmt.Println("ReadFile failed", err)
		panic(err)
	}
	json.Unmarshal(data, &conf)
}

func getEnvDefault(key, defVal string) string {
	val, ex := os.LookupEnv(key)
	if !ex {
		return defVal
	}
	return val
}
